/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ucab.desarrollo.viajesbook;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

import java.util.logging.Level;
import java.util.logging.Logger;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.http.AccessToken;
import twitter4j.http.RequestToken;
import twitter4j.Status;
/**
 *
 * @author isak
 */
public class TwitterAdmin implements  Serializable
{

    String url;
    String consumer = "9yxhHX5KlvZzgjzBuo4w";
    String consumerSecret= "ICRy3ACcHevmVuQ4XesExwlF2gorkYmvdVaCzj22w";
    String token;
    String tokenSecret;
    RequestToken requestToken;
    Twitter twitter;
    private AccessToken accessToken = null;
    

    /**
     * CONSTRUCTOR
     */
    public TwitterAdmin()
    {
    }

    /**
     * creo el objeto requestToken y obtengo el url de confirmacion
     * @return
     * @throws TwitterException
     */
    public String inicioTwitter() throws TwitterException
    {
        twitter = new TwitterFactory().getInstance();
	twitter.setOAuthConsumer(consumer, consumerSecret);
	requestToken = twitter.getOAuthRequestToken();
        token = requestToken.getToken();
	tokenSecret = requestToken.getTokenSecret();
        url = requestToken.getAuthorizationURL();
        return url;
	
    }

    /**
     * serializa el accessToken para su posterior uso , lo guarda en un archivo
     * @param pinIn
     * @param direccion
     * @return
     * @throws TwitterException
     */
    public AccessToken guardarToken(String pinIn) throws TwitterException
    {
        
   
        try
        {
            accessToken = twitter.getOAuthAccessToken(requestToken, pinIn);
            //twitter.setOAuthAccessToken(accessToken);
            System.out.println("Credencial Twitter: " + twitter.verifyCredentials().getId());
            System.out.println("token : " + accessToken.getToken());
            System.out.println("tokenSecret : " + accessToken.getTokenSecret());
            Status status = twitter.updateStatus("Tweet desde Struts");
            
        }
        catch (TwitterException te)
        {
            if(401 == te.getStatusCode())
            {
                System.out.println("TRAVEL STORE: No se pudo obtener el AccessToken.");
            }else
            {
                 te.printStackTrace();
            }
        }
        finally{
        return accessToken;
        }
    }



     /**
      * funcion que permite enviar tweets
      * @param token
      * @param mensaje
      */
    public  void enviarTweet(String mensaje)
     {        
        try
        {
            Status status = twitter.updateStatus(mensaje);
            
        } 
        catch (TwitterException ex)
        {
            Logger.getLogger(TwitterAdmin.class.getName()).log(Level.SEVERE, null, ex);
        }

     }



     public void restaurarToken(AccessToken access)
     {
        twitter = new TwitterFactory().getInstance();
        twitter.setOAuthConsumer(consumer, consumerSecret);
        twitter.setOAuthAccessToken(access);
        accessToken = access;

     }

    /**
     * @return the accessToken
     */
    public AccessToken getAccessToken() {
        return accessToken;
    }

    /**
     * @param accessToken the accessToken to set
     */
    public void setAccessToken(AccessToken accessToken) {
        this.accessToken = accessToken;
    }


       public void serializar (String archivo) throws IOException
       {
            ObjectOutputStream salida = new ObjectOutputStream(new FileOutputStream(archivo));
            salida.writeObject(this);
       }

        public TwitterAdmin hidratar (String archivo) throws  ClassNotFoundException
        {
            try
            {
                ObjectInputStream entrada = new ObjectInputStream(new FileInputStream(archivo));
                return (TwitterAdmin) entrada.readObject();
            }catch(IOException e)
            {
                return null;
            }
        }


}
